///////////////////
/// mkII - Core ///
///////////////////

#pragma once

// Core includes
#include "../../Core/Math/mkMathDeclare.h"

namespace mk
{
namespace Core
{
namespace Math
{
namespace Constants
{

#define MK_MATH_VECTOR128_CONSTANT1(x)       {x,x,x,x}
#define MK_MATH_VECTOR128_CONSTANT4(x,y,z,w) {x,y,z,w}
#define MK_MATH_VECTOR128U_CONSTANT1(x) { x & 0xFF, x>>8 & 0xFF, x>>16 & 0xFF, x>>24 & 0xFF }

// Masks.
static Vector128i const uint_sign_mask  = MK_MATH_VECTOR128U_CONSTANT1(0x80000000 );  // = 0b1000000...000
static Vector128i const uint_value_mask = MK_MATH_VECTOR128U_CONSTANT1(0x7fffffffu); // = 0b0111111...111
static Vector128i const uint_true_mask  = MK_MATH_VECTOR128U_CONSTANT1(0xffffffff );  // = 0b1111111...111
static Vector128i const uint_false_mask = MK_MATH_VECTOR128U_CONSTANT1(0x00000000u); // = 0b0000000...000

static Vector128r const real4_one     = MK_MATH_VECTOR128_CONSTANT1( 1.0f );
static Vector128r const real4_epsilon = MK_MATH_VECTOR128_CONSTANT1( 1e-6 );

}
} // namespace Math
} // namespace Core
} // namespace mk

